﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using app_Cd.accesoDatos;

namespace app_Cd.logicaNegocio
{
    public static class admDisco
    {
        /// <summary>
        /// Busca una lista de cd que cumplan con las condiciones establecidas
        /// </summary>
        /// <param name="cd">Lista de cd encontrados anteriormente</param>
        /// <param name="idArtista">Id del artista a buscar</param>
        /// <returns>Un cd</returns>
        public static Disco buscaCdArtista(List<string> cd, int idArtista)
        {
            admCDEntities bd = new admCDEntities();
            return bd.Disco.FirstOrDefault(c => c.ID_artista == idArtista & !cd.Contains(c.Nombre));
        }
        /// <summary>
        /// Busca el id del artista por el nombre
        /// </summary>
        /// <param name="busqueda">Nombre del artista</param>
        /// <returns>Un artista</returns>
        public static Artista buscaIdArtista(string busqueda)
        {
            admCDEntities bd = new admCDEntities();
            return bd.Artista.FirstOrDefault(a => a.Nombre == busqueda);
        }
        /// <summary>
        /// Busca el cd que corresponda a la busqueda realizada
        /// </summary>
        /// <param name="busqueda">Nombre del cd</param>
        /// <returns></returns>
        public static Disco buscaInfoDisco(string busqueda)
        {
            admCDEntities bd = new admCDEntities();
            return bd.Disco.FirstOrDefault(d => d.Nombre == busqueda);
        }
        /// <summary>
        /// Elimina el cd que corresponda al parametro de busqueda
        /// </summary>
        /// <param name="idCd">Id del cd</param>
        /// <returns></returns>
        public static string eliminaCd(int idCd)
        {
            admCDEntities bd = new admCDEntities();
            Disco eliminaDisco = bd.Disco.Find(idCd);
            bd.Disco.Remove(eliminaDisco);
            bd.SaveChanges();
            string mensaje = "Disco eliminado";
            return mensaje;
        }
        /// <summary>
        /// Actualiza el cd que corresponda al parametro de busqueda
        /// </summary>
        /// <param name="idCd">Id cd</param>
        /// <param name="idCategoria">Id categoria</param>
        /// <param name="anio">Año</param>
        /// <returns></returns>
        public static string actualizaCd(int idCd, int idCategoria, int anio)
        {
            admCDEntities bd = new admCDEntities();
            Disco actualizaDisco = bd.Disco.Find(idCd);
            actualizaDisco.ID_categoria = idCategoria;
            actualizaDisco.Anio = anio;
            bd.SaveChanges();
            string mensaje= "Disco actualizado";
            return mensaje;
        }
        /// <summary>
        /// Busca la categoria que corresponda al parametro de busqueda
        /// </summary>
        /// <param name="categoria">nombre de categoria</param>
        /// <returns></returns>
        public static Categoria buscaCategoria(string categoria)
        {
            admCDEntities bd = new admCDEntities();
            return bd.Categoria.FirstOrDefault(c => c.Descripcion == categoria);
        }
        /// <summary>
        /// Ingresa un nuevo artista y retorna su id
        /// </summary>
        /// <param name="categoria">nombre de artista</param>
        /// <returns></returns>
        public static Categoria ingresaCategoria(string categoria)
        {
            admCDEntities bd = new admCDEntities();
            Categoria ingCategoria = new Categoria
            {
                Descripcion=categoria
            };
            bd.Categoria.Add(ingCategoria);
            bd.SaveChanges();
            return buscaCategoria(categoria);
        }
        /// <summary>
        /// Ingresa un nuevo artista y retorna su id
        /// </summary>
        /// <param name="categoria">nombre de artista</param>
        /// <returns></returns>
        public static Artista ingresaArtista(string artista)
        {
            admCDEntities bd = new admCDEntities();
            Artista ingArtista = new Artista
            {
                Nombre=artista
            };
            bd.Artista.Add(ingArtista);
            bd.SaveChanges();
            return buscaIdArtista(artista);
        }
        /// <summary>
        /// Permite Ingresar un nuevo disco a la base de datos
        /// </summary>
        /// <param name="album">Nombre del disco</param>
        /// <param name="idArtista">Id del artista</param>
        /// <param name="idCategoria">Id de la categoria</param>
        /// <param name="anio">Año de publicación del disco</param>
        /// <returns></returns>
        public static string ingresaDisco(string album, int idArtista, int idCategoria, int anio)
        {
            string mensaje= "Disco Ingresado";
            admCDEntities bd = new admCDEntities();
           
                Disco nuevoDisco = new Disco
                {
                    Nombre=album,
                    ID_artista=idArtista,
                    ID_categoria=idCategoria,
                    Anio=anio
                };
                bd.Disco.Add(nuevoDisco);
                bd.SaveChanges();
                return mensaje;
        }
    }
}
